import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:hf_enjoy/utils/http.dart';
import 'package:hf_enjoy/utils/toast.dart';
import 'package:permission_handler/permission_handler.dart';

class LocationList extends StatefulWidget {
  const LocationList({super.key});

  @override
  State<LocationList> createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {
  String apiKey = 'ec6f580a9ed57f6731978c15a3a50fb1';
  String currentAddress = '';
  String baseUrl = 'https://restapi.amap.com/v3';
  List nearbyCommunities = [];



  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    requestLocationPermission();
    reverseGeocoding(40.065956, 116.350077);
    queryNearbyCommunities(40.065956, 116.350077);
  }
  ///申请位置权限
  Future<void> requestLocationPermission()async{
    try {
      ToastUtil.showSuccess('开始授权');
      PermissionStatus status = await Permission.location.request();
      if (status.isGranted) {
        // 权限未授予
        ToastUtil.showSuccess('位置权限授予');
        getCurrentLocation();
      } else {
        // 权限未授予
        ToastUtil.showError('位置权限未授予, 请去设置中心开启');
      }
    } catch (e) {
      print(e);
    }
    
  }

  /**
   * 异步获取当前设备的位置信息。
   * 
   * 此方法首先根据设备的平台（Android、iOS/macOS 或 Web）配置不同的定位设置，
   * 然后使用这些设置获取设备的当前位置，并处理位置信息或异常。
   */
  Future<void> getCurrentLocation() async {
    late LocationSettings locationSettings;

    if (defaultTargetPlatform == TargetPlatform.android) {
      // 针对Android平台，设置高精度定位、100米距离过滤、强制使用位置管理器等
      locationSettings = AndroidSettings(
          accuracy: LocationAccuracy.high,
          distanceFilter: 100,
          forceLocationManager: true,
          intervalDuration: const Duration(seconds: 10),
          foregroundNotificationConfig: const ForegroundNotificationConfig(
            notificationText: "Example app will continue to receive your location even when you aren't using it",
            notificationTitle: "Running in Background",
            enableWakeLock: true,
          ));
    } else if (defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS) {
      // 针对iOS和macOS平台，设置高精度定位、健身活动类型、100米距离过滤等
      locationSettings = AppleSettings(
        accuracy: LocationAccuracy.high,
        activityType: ActivityType.fitness,
        distanceFilter: 100,
        pauseLocationUpdatesAutomatically: true,
        // 只有在应用在后台启动时才设置为true
        showBackgroundLocationIndicator: false,
      );
    } else if (kIsWeb) {
      // 针对Web环境，设置高精度定位、100米距离过滤、5分钟的最大年龄等
      locationSettings = WebSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
        maximumAge: const Duration(minutes: 5),
      );
    } else {
      // 对于其他平台，默认设置高精度定位和100米距离过滤
      locationSettings = const LocationSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
      );
    }

    try {
      // 使用配置好的定位设置获取当前位置
      Position position = await Geolocator.getCurrentPosition(locationSettings: locationSettings);
      // 显示成功获取到的纬度和经度
      ToastUtil.showSuccess('${position.latitude}, ${position.longitude}');
    } catch (e) {
      // 处理可能出现的异常
      print(e.toString());
    }
  }

  ///使用配置好的经纬度获取当前位置地址
  Future<void> reverseGeocoding(double latitude, double longitude) async {
  String url =
      '$baseUrl/geocode/regeo?key=$apiKey&location=$longitude,$latitude';
  try {
    var response = await http.get(url);
    print(response['regeocode']['formatted_address']);
    setState(() {
      currentAddress = response['regeocode']['formatted_address'];
    });
  } catch (e) {
    print('查询过程中出现错误: $e');
  }
}

  //获取附近社区
  Future<void> queryNearbyCommunities(double latitude, double longitude) async {
    String url =
        '$baseUrl/place/around?key=$apiKey&location=$longitude,$latitude&radius=500&types=住宅小区';
    try {
      var response = await http.get(url);
      for (var element in (response['pois'] as List)) {
       
        setState(() {
          nearbyCommunities.add(element);
        });
      }
    } catch (e) {
      print('查询过程中出现错误: $e');
    }
}

  @override
  Widget build(BuildContext context) {
    return  Scaffold(
      appBar: AppBar(
        title: const Text("选择社区"),
      ),
      body: ListView(
        padding: const EdgeInsets.all(10),
        children: [
          const Row(
            children: [
              Text("当前地址",style: TextStyle(color: Colors.grey),)
            ],
          ),
          const SizedBox(height: 10),
          Container(
            padding: EdgeInsets.all(10),
            color: Colors.white,
            child:  Row(
              children: [
                Expanded(child: Text(currentAddress)),
                Row(children: [
                  Icon(Icons.location_searching_outlined,color: Colors.blue),
                  Text("重新定位",style: TextStyle(color: Colors.blue),)
                ])
              ],
            ),
          ),
          const SizedBox(height: 10),
          const Row(children: [Text("附近社区",style: TextStyle(color: Colors.grey))]),
          const SizedBox(height: 10),
          ListView(
            shrinkWrap: true,
            physics: const NeverScrollableScrollPhysics(),
            children: nearbyCommunities.map((item)=>GestureDetector(
              onTap: (){
                Navigator.pushNamed(context, '/building_list',arguments: {'point': item['name']});
              },
              child: Container(
                color: Colors.white,
                padding: const EdgeInsets.all(10),
                child: Row(children: [
                  Expanded(child: Text('${item['name']}')),
                  const Row(children: [
                    Icon(Icons.arrow_forward_ios,
                        size: 16, color: Colors.black),
                  ])
                ])),
            )).toList()
          )
        ],
      ),
    );
  }
}